The proliferation of computers and the advent of the Internet and the maturing of the World Wide Web (“web”) have significantly increased the use of distributed application programs. Examples of distributed application programs include collaboration programs, chat room programs, instant messaging programs, conferencing programs, gaming programs, and the like. Each of these application programs enable multiple, geographically distributed computer users to interactively exchange information in real time.
One prevalent method of creating the distributed application programs is to use object-oriented programming. Object-oriented programming is a method of creating computer programs by combining or linking reusable components, called “objects,” to create applications. An object is a programming unit containing both data and instructions for performing operations on that data. In object-oriented programming, the operations are referred to as “methods.”
Object-oriented application programs use objects to define their data and the methods that operate on the data. Typically, two objects communicate with each other via messages, which include a protocol that defines the method of communication. In distributed application programs, these objects can reside, for example, on different computing systems and across networks, within different application processes running on the same computing system, within different components/subcomponents running within the same process, different processes, or a different process on a different computing system. Distributed computing is frequently based on the client-server paradigm, and in client-server terminology, the requesting object is referred to as the client object and the servicing object is referred to as the server object.
In a distributed configuration where different subsystems—e.g., an instance of a distributed application program on a client computing system and an instance of the distributed application program on a server computing system—use remote objects or distributed objects (DOs) as the mechanism for communication, the DOs are connected or coupled in pairs. For example, a DO in one subsystem—i.e., a client subsystem—is coupled to a corresponding DO in the other subsystem—i.e., a server subsystem—through a separate logical channel. Where we have multiple DOs, each of the DOs in the client needs to be coupled to its corresponding DO in the server.
A drawback to the current distributed configuration where different subsystems use DOs as the method for communication is that it is not possible to ensure that all of the required objects are available when the connection is established between the communicating subsystems. The subsystem does not have prior knowledge or information of all the DOs that are required. The subsystem attains knowledge of a required DO only when the DO needs to be created. Therefore, the distributed subsystems proceed to function as if everything was fine even if one or more DOs are missing or not supported by either or both subsystems. Then, when one or both subsystems realize that a required DO is missing, the communication between the subsystems is adversely affected, and the subsystems are no longer able to communicate.
It would be desirable to have a technique that would allow the different subsystems in a distributed configuration to perform an early availability check on all necessary/desired DOs when the subsystems connect, or soon thereafter.